<?php
class DocumentoComprasController extends AppController {

    public $name = 'DocumentoCompras';
    public $appModule = 'Logistica';
    public $helpers = array('Html','Form','Ajax','Javascript','Paginator','Time','Number','Codigo','GetList', 'TextDate','AdcReporter');
    public $components = array('RequestHandler');
    public $uses = array('DocumentoCompra','Empresa','CodigoDocumento','Usuario','Proveedore');
    
    public function index($busqueda = null) {
        $busqueda = $this->getBusqueda($this->data['Boleta']['busqueda']);		
        $this->set('busqueda', $busqueda);
        $params = $this->params['url'];
        if(!empty($params['q'])){
                $q = $params['q'];
        }

        $this->DocumentoCompra->Behaviors->attach('Containable');
        $this->paginate['DocumentoCompra'] = array(
                'order'=>array('DocumentoCompra.fecha_emision'=>'desc', 'DocumentoCompra.numero_documento'=>'desc'),
                'fields'=>array(
                    'DocumentoCompra.id',
                    'DocumentoCompra.centro_dist_id',
                    'DocumentoCompra.numero_control',
                    'DocumentoCompra.numero_documento',
                    'DocumentoCompra.codigo_documento_id',
                    'DocumentoCompra.fecha_emision',
                    'DocumentoCompra.nombre_proveedor',
                    'DocumentoCompra.ruc_proveedor',
                    'DocumentoCompra.suma_importe_total',
                    'DocumentoCompra.anulado'),
                'contain' => array(
                    'CodigoDocumento'=>array('fields'=>array('simbolo')),
                    'Moneda'=>array('fields'=>array('simbolo'))
            ));
		
            //verificando si la búsqueda se hace por fechas
            //$fechas_split = explode('-',$q);
            $fechas = !(empty($params['fecha_inicial']) && empty($params['fecha_final']));

            if($fechas){
                    $fecha_inicial = $params['fecha_inicial'];
                    $fecha_final = $params['fecha_final'];

                    $this->limite = 1000;
                    $conditions = array(
                            'DocumentoCompra.activo ='=>'true',
                            'DocumentoCompra.empresa_id'=>$this->empresaId(),
                            'DocumentoCompra.centro_dist_id'=>$this->centroDistId(),		
                            'DocumentoCompra.ejercicio_id'=>$this->ejercicioId(),                            
                            'DocumentoCompra.fecha_emision BETWEEN ? AND ?' => array($fecha_inicial, $fecha_final)            
                    );

                    //$DocumentoCompras = $this->DocumentoCompra->find('all',array(
                    //	'conditions'=>$conditions,
                    //	'contain' => $this->paginate['DocumentoCompra']['contain'],
                    //	'fields'=> $this->paginate['DocumentoCompra']['fields'],
                    //	'order'=> $this->paginate['DocumentoCompra']['order']
                    //));

                    $this->paginate['DocumentoCompra'] = array(
                            'limit'=>1000
                    );
                    $DocumentoCompras = $this->paginate('DocumentoCompra',$conditions);
            } elseif (!empty($q)) {
                    $DocumentoCompras = $this->paginate('DocumentoCompra', array(
                            'DocumentoCompra.activo ='=>'true',
                            'DocumentoCompra.empresa_id'=>$this->empresaId(),
                            'DocumentoCompra.centro_dist_id'=>$this->centroDistId(),		
                            'DocumentoCompra.ejercicio_id'=>$this->ejercicioId(),		
                            'DocumentoCompra.codigo_documento_id <>'=>'160',
                            'OR'=>array(
                                'DocumentoCompra.numero_documento  SIMILAR TO'=>"%$busqueda%",
                                'DocumentoCompra.numero_control  SIMILAR TO'=>"%$busqueda%",
                                'DocumentoCompra.ruc_proveedor  SIMILAR TO'=>"%$busqueda%",                    
                                'DocumentoCompra.nombre_proveedor SIMILAR TO'=>"%$busqueda%",
                                'to_char("DocumentoCompra"."fecha_emision", \'dd/mm/yyyy\') ILIKE' => "$q%"
                            )
                        ));
            } else {
                    $DocumentoCompras = $this->paginate('DocumentoCompra',array('and'=>array(
                            'DocumentoCompra.activo ='=>'true',
                            'DocumentoCompra.empresa_id'=>$this->empresaId(),
                            'DocumentoCompra.centro_dist_id'=>$this->centroDistId(),				
                            'DocumentoCompra.ejercicio_id'=>$this->ejercicioId(),
                            'DocumentoCompra.codigo_documento_id <>'=>'160',
                )));
            }
		
        $this->set('DocumentoCompras', $DocumentoCompras);
        $this->set('limite', $this->limite);
        $this->data['DocumentoCompra']['pagesize'] = $this->limite;     
    }
	
    public function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Documento de Compra.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->DocumentoCompra->Behaviors->attach('Containable');
        $documento_compra = $this->DocumentoCompra->find('first', array(
				'conditions'=>array( 
					'DocumentoCompra.id'=>$id,
					//'DocumentoCompra.activo'=>true					
				),
				'contain'=>array(
					'Proveedore',
					'Moneda',
					'CodigoDocumento'	=>	array('id', 'descripcion'),
					'CodigoDocumentoRef'=>	array('id','descripcion'),					
					'Actividade'		=>	array('id','codigo', 'descripcion'),
					'DocumentoCompraDetalle' )
			));
		if(!empty($documento_compra) && empty($documento_compra['DocumentoCompra']['activo'])){
			$this->Session->setFlash("el documento de compra fue eliminado");
			$this->redirect(array('action'=>'index'),null,true);
		}
		if(!empty($documento_compra) && !empty($documento_compra['DocumentoCompra']['anulado'])){
			$this->Session->setFlash("el documento de compra está anulado");
		}
               
		$this->set('documento_compra', $documento_compra);		
    }

    public function ajax() {
             if ($this->RequestHandler->isAjax() && !empty($this->params['form'])) {
                     $this->autoRender = false;//desabilito el auto dibujado
                     $this->autoLayout = false;//desabilito el auto layout
                    if(!isset($this->params['form']['action'])){
                                    $this->params['form']['action'] = 0;
                    }
                    $params = $this->params;

                    switch ($this->params['form']['action']){
                            case 0: //auto completar
                                    $value = trim($this->params['form']['query']);
                                    $data = $this->Producto->find('all', array(
                                            'conditions'=> array(
                                                    'Producto.activo ='=>'true',
                                                    'or'=>array(
                                                            'Producto.codigo ILIKE'=>"%$value"))));
                                    $productos = Set::format($data, '{0}-{1}', array('{n}.Producto.codigo', '{n}.Producto.descripcion'));
                                    foreach ($productos as $product){
                                            // Return Array
                                            $arrayMod[] = array("value" => $product);
                                    }
                                    $result = $arrayMod;
                                    break;
                            case 1:
                                    $this->DocumentoCompra->Proveedore->recursive = 2;
                                    if (empty($this->params['form']['DocumentoCompraRucProveedor'])){// si no hay envio solo Editar busco por id
                                            $data = $this->DocumentoCompra->Proveedore->find('first', array(
                                                            'conditions'=> array(
                                                                            'Tercero.empresa_id'=>$this->_usuario['Tercero']['empresa_id'],
                                                                            'Proveedore.id'=>$this->params['form']['DocumentoCompraProveedorId'],
                                                                            'Proveedore.activo'=>true)));
                                    }else{
                                             $data = $this->DocumentoCompra->Proveedore->find('first', array(
                                                            'conditions'=> array(
                                                                            'Proveedore.codigo'=>$this->params['form']['DocumentoCompraRucProveedor'],
                                                                            'Tercero.empresa_id'=>$this->_usuario['Tercero']['empresa_id'],
                                                                            'Proveedore.activo'=>true
                                                            )));
                                    }
                                    $result = $data;
                                    break;

                            case 2:///Para codigo de documento
                                    $this->DocumentoCompra->CodigoDocumento->recursive = 0;//con cuantas tablas quiero trabajar
                                    $this->params['form']['DocumentoCompraCodigoDocumentoId'] = empty($this->params['form']['DocumentoCompraCodigoDocumentoId'])?$this->params['form']['DocumentoCompraCodigoDocumentoRefId']:$this->params['form']['DocumentoCompraCodigoDocumentoId'];
                                    $data = $this->DocumentoCompra->CodigoDocumento->find('first', array(
                                                    'conditions'=> array('CodigoDocumento.id'=>$this->params['form']['DocumentoCompraCodigoDocumentoId'] )));

                                    $result = $data['CodigoDocumento'];
                                    break;

                            case 3:
                                    $this->Producto->recursive = 0;//con cuantas tablas quiero trabajar
                                    $data = $this->Producto->find('first', array(
                                                    'conditions'=> array(
                                                            'Producto.codigo'=>$this->params['form']['CodigoDetalle'],
                                                            'Producto.empresa_id'=>$this->_usuario['Tercero']['empresa_id'],
                                                            )));
                                    $result = $data['Producto'];
                                    break;

                            case 4:
                                    $this->Aduana->recursive = -1;//con cuantas tablas quiero trabajar
                                    $data = $this->Aduana->find('first', array(
                                            'conditions'=> array(
                                                    'Aduana.codigo'=>$this->params['form']['DocumentoCompraAduanaCodigo'],
                                                    )));
                                    $result = $data['Aduana'];
                                    break;

                            case 101:
                                    $this->DocumentoCompra->Proveedore->recursive = 0;
                                    $code = $this->params['form']['DocumentoCompraRucProveedor'];
                                    $data = $this->DocumentoCompra->Proveedore->find('all', array(
                                            'conditions'=> array(
                                                    'Tercero.empresa_id'=>$this->_usuario['Tercero']['empresa_id'],
                                                    'Proveedore.activo'=>true,
                                                    'or'=>array(
                                                            'Tercero.ruc ILIKE'=>"%$code%",
                                                            'Tercero.razon_social ILIKE'=>"%$code%",
                                                            'Proveedore.nombre_comercial ILIKE'=>"%$code%",
                                                            '(Tercero.apellido_paterno||\' \'||Tercero.apellido_materno||\', \'||Tercero.nombres) ILIKE'=>"%$code%",
                                                    )),
                                            'limit'=>100));
                                    $result = $data;
                                    break;

                            case 102:
                                    $this->Producto->recursive = 0;
                                    $code = $this->params['form']['CodigoDetalle'];
                                    $data = $this->Producto->find('all', array(
                                            'conditions'=> array(
                                                    'Producto.empresa_id'=>$this->_usuario['Tercero']['empresa_id'],
                                                    'or'=>array(
                                                            'Producto.codigo ILIKE'=>"%$code%",
                                                            'Producto.descripcion ILIKE'=>"%$code%",
                                                    ))));
                                    $result = $data;
                                            break;
                            case 103:
                                    $this->CodigoDocumento->recursive = 0;
                                    $code = $this->params['form']['DocumentoCompraCodigoDocumentoId'];
                                    $data = $this->CodigoDocumento->find('all', array(
                                            'conditions'=> array('or'=>array(
                                                    'cast(CodigoDocumento.id as text ) ILIKE'=>"%$code%",
                                                    'CodigoDocumento.descripcion ILIKE'=>"%$code%",
                                            ))));
                                    $result = $data;
                                    break;

                            case 104:
                                    $this->Aduana->recursive = 0;
                                    $code = $this->params['form']['DocumentoCompraAduanaCodigo'];
                                    $data = $this->Aduana->find('all', array(
                                            'conditions'=> array('or'=>array(
                                                    'Aduana.codigo ILIKE'=>"%$code%",
                                                    'Aduana.descripcion ILIKE'=>"%$code%",
                                            ))));
                                    $result = $data;
                                    break;

                            case 5:
                                    if(!empty($this->params['form']['fecha'])){
                                                    $fecha = $this->params['form']['fecha'];
                                    } else {
                                                    $fecha = $this->_ejercicio['Actual']['fecha'];
                                    }				
                                    $value = $this->params['form']['moneda_id'];
                                    $data = $this->TipoCambio->getCompras(
													$value,
													$this->_usuario['Empresa']['moneda_id'],
													$fecha);
                                    if(empty($data[0])){
                                            $data[0] = $data[1];
                                    }
                                    $data[0] = ($data[0] == 0)?1:$data[0];
                                    $data[1] = ($data[1] == 0)?1:$data[1];
                                    $result = $data;
                                    break;
                            case 9:
                                    $value = $this->params['form']['id'];
                                    $detalles = $this->DocumentoCompra->DocumentoCompraDetalle->find('all', array(
                                            'conditions'=>array(
                                                    'documento_compra_id'=>$value,
                                                    'pendiente_despacho >'=>0 ),
                                            'contain'=>array(
                                                    'Producto'=>array('codigo','descripcion')
                                    )));
                                    foreach($detalles as &$detalle){
                                                    $detalle['Detalle'] = $detalle['DocumentoCompraDetalle'];
                                                    unset($detalle['DocumentoCompraDetalle']);
                                    }
                                    $result = $detalles;
                                    break;
                            case 20: //save listado de compras
                                    $params = $this->params['form'];

                                    $state = $this->save_listado_compras();
                                    $msg = $this->data['msg'];

                                    $result = array('state'=>$state,'msg'=>$msg);
                                    //$this->Session->setFlash("$msg");
                                    break;
                            case 66:
                                            $form = $this->params['form'];
                                            $conditions = array(
                                                    'Proveedore.activo'=>true,
                                                    'Proveedore.codigo'=>$form['DocumentoCompraRucProveedor']);

                                            $this->loadModel('Proveedore');
                                            $data = $this->Proveedore->find('first', array(
                                                    'fields'=>array('codigo'),
                                                    'conditions'=>$conditions,
                                                    'contain'=>array('Tercero'),
                                                    )
                                            );						
                                            $this->loadModel('Tercero');/////////////////////////////////////////////////////////
                                            //$datos=$this->Tercero->datosSunat($form['ProveedoreCodigo']);
                                            //$data=$datos;				

                                            $result = $data;
                    break;
                    }

                    Configure::write('debug', 0); //quito el debugger
                    ob_end_clean();
                    if ($result){
                            $this->header('Content-Type: application/json');
                            echo json_encode($result);
                    } else echo '';
            }

    }

    private function insert() {    								
        $this->DocumentoCompra->create();                        
        $periodo_id  = $this->periodoId($this->data['DocumentoCompra']['fecha_emision']);
        $this->data['DocumentoCompra']['empresa_id'] = $this->empresaId();
        $this->data['DocumentoCompra']['centro_dist_id'] = $this->centroDistId();
        $this->data['DocumentoCompra']['ejercicio_id'] = $this->ejercicioId();
        $this->data['DocumentoCompra']['periodo_id'] = $periodo_id;
        $this->data['DocumentoCompra']['percepcion_id'] = '0';
        $this->data['DocumentoCompra']['activo'] = true;
        $this->data['DocumentoCompra']['anulado'] = false;
        $this->data['DocumentoCompra']['tipo_cambio_impuesto'] = $this->data['DocumentoCompra']['tipo_cambio'];
        $this->data['DocumentoCompra']['usuario_creacion_id'] = $this->_usuario['id'];
        $this->data['DocumentoCompra']['fecha_creacion'] = 'now()';
        $this->data['DocumentoCompra']['compra_directa'] = false;
        
		if($this->data['DocumentoCompra']['opc']=='0'){ $this->data['DocumentoCompra']['compra_directa'] = true;}
		
        if(empty($this->data['DocumentoCompra']['proveedor_id'])){
            $this->data['DocumentoCompra']['proveedor_id']	= $this->add_proveedor($this->data);
        	if(!$this->data['DocumentoCompra']['proveedor_id']){
                $this->Session->setFlash("No se pudo guardar el Proveedor verifique que este habilitado");
                return false;
			}
        }
                
        if ($this->DocumentoCompra->save($this->data)) {
            $documento_compra_id = $this->DocumentoCompra->id;
            if(!empty($this->data['DocumentoCompraDetalle'])){
                foreach($this->data['DocumentoCompraDetalle'] as $detalle){
                    if ($detalle['cantidad']!='' && $detalle['valor_unidad']!='' && $detalle['eliminado'] != '1'){
                        $this->DocumentoCompra->DocumentoCompraDetalle->create();
                        $detalle['documento_compra_id'] = $this->DocumentoCompra->id;
                        if (!$this->DocumentoCompra->DocumentoCompraDetalle->save($detalle)){                        	
                            $this->DocumentoCompra->rollback();
                            return false;
                            break;
                        }
                        if(!empty($detalle['producto_id'])){                        
	                        $producto = $this->Producto->find('first',array(
	                            'recursive'=>-1,
	                            'conditions'=>array('id'=>$detalle['producto_id'])));
	                        $factor = empty($producto['Producto']['factor_conversion'])?1:$producto['Producto']['factor_conversion'];
	                        $producto['Producto']['importe_base']	=	$detalle['valor_unidad']/$factor;
	                        $producto['Producto']['moneda_id']		=	$this->data['DocumentoCompra']['moneda_id'];
	                        $producto['Producto']['proveedor_id']	=	$this->data['DocumentoCompra']['proveedor_id'];
	                        $this->Producto->save($producto);
                        }
                    }
                }
            }
			
            //modificacion del presupuesto y del saldo del contrato
            if(!empty($this->data['DocumentoCompra']['orden_compra_id'])){
                    $this->DocumentoCompra->Behaviors->attach('Containable');
                    $orden_compra = $this->DocumentoCompra->find('first', array(
                        'conditions'=>array(
                                'id'=>$this->data['DocumentoCompra']['orden_compra_id'],
                                'activo'=>true),
                          'contain'=>array(
                                'DocumentoCompraDetalle'
                          )
                    ));
                    if(!empty($orden_compra['DocumentoCompra']['proyecto_id'])){
                            $proyecto = $this->Proyecto->find('first',
                                                            array(	'conditions'=>array(
                                                                                            'Proyecto.id'=>$orden_compra['DocumentoCompra']['proyecto_id'] ),
                                                                            'recursive'=>-1));
                            $proyecto['Proyecto']['saldo'] = $proyecto['Proyecto']['saldo'] - $this->data['DocumentoCompra']['suma_importe_total'];
                            $proyecto['Proyecto']['saldo'] = ($proyecto['Proyecto']['saldo'] < 0)?0:$proyecto['Proyecto']['saldo'];
                            $this->Proyecto->save($proyecto['Proyecto']);
                    }
                    if(!empty($orden_compra['DocumentoCompra']['contrato_id'])){
                            $contrato_detalle = $this->Contrato->ContratoDetalle->find('all',array(
                                'conditions'=>array(
                                    'ContratoDetalle.contrato_id'=>$orden_compra['DocumentoCompra']['contrato_id'] ),
                                'recursive'=>-1
                            ));
                            foreach($contrato_detalle as $detalle){
                                $documento_detalle = $this->DocumentoCompraDetalle->find('first', array(
                                    'conditions'=>array(
                                        'DocumentoCompraDetalle.producto_id'=>$detalle['ContratoDetalle']['producto_id'],
                                        'DocumentoCompraDetalle.documento_compra_id'=>$documento_compra_id,
                                    ),
                                    'recursive'=>-1
                                ));
                                $detalle['ContratoDetalle']['saldo'] = $detalle['ContratoDetalle']['saldo'] - $documento_detalle['DocumentoCompraDetalle']['cantidad'];
                                $detalle['ContratoDetalle']['saldo'] = ($detalle['ContratoDetalle']['saldo'] < 0)?0: $detalle['ContratoDetalle']['saldo'];
                                $this->Contrato->ContratoDetalle->save($detalle['ContratoDetalle']);
                            }
                    }
                    foreach($orden_compra['DocumentoCompraDetalle'] as $detalle){
                            $documento_detalle = $this->DocumentoCompra->DocumentoCompraDetalle->find('first', array(
                                'conditions'=>array(
                                    'DocumentoCompraDetalle.producto_id'=>$detalle['producto_id'],
                                    'DocumentoCompraDetalle.documento_compra_id'=>$documento_compra_id,
                                ),
                                'recursive'=>-1
                            ));
                            $detalle['cantidad_despachada'] = $detalle['cantidad_despachada'] + $documento_detalle['DocumentoCompraDetalle']['cantidad'];
                            $detalle['pendiente_despacho']  = $detalle['pendiente_despacho'] - $documento_detalle['DocumentoCompraDetalle']['cantidad'];
                            $detalle['pendiente_despacho']  = ($detalle['pendiente_despacho'] < 0)?0:$detalle['pendiente_despacho'];
                            $this->DocumentoCompra->DocumentoCompraDetalle->save($detalle);
                    }
				
                    $_orden_compra_detalle  = $this->DocumentoCompra->DocumentoCompraDetalle->find('all', array(
                        'recursive'=>-1,
                        'conditions'=>array(
                                'documento_compra_id'=>$orden_compra['DocumentoCompra']['id'],
                                'pendiente_despacho <>'=>0,
                        )
                    ));
                    if(!count($_orden_compra_detalle)){
                        $value = $this->DocumentoCompra->OrdenCompra->find('first', array('recursive'=>-1,'conditions'=>array('id'=>$orden_compra['DocumentoCompra']['id'])));
                        $value['OrdenCompra']['finalizado'] = true;
                        $this->DocumentoCompra->OrdenCompra->save($value['OrdenCompra']);
                    }
            }
            return $documento_compra_id;
        } else {        	
			$this->DocumentoCompra->rollback();
			return false;
        }
    }
	
    public function add($id=null){
        $this->set('previo',$this->referer());
        $this->set('ref_impuesto',$this->_usuario['Empresa']['igv']);        
        $this->set('monedas', $this->DocumentoCompra->Moneda->find('list',
			 array('fields'=>array('Moneda.id','Moneda.simbolo'))));
        $this->set('documentosConCreditoFiscal',json_encode($this->DocumentoCompra->documentosConCreditoFiscal));
       
        if(!empty($this->data)) {		
            $this->data['DocumentoCompra']['numero_documento']=	$this->data['DocumentoCompra']['serie'].$this->data['DocumentoCompra']['documento'];		
            //validando la existencia del documento de compra
            $validar_documento = $this->DocumentoCompra->find('first',array(
				'conditions'=>array(
					'DocumentoCompra.activo'=>true,
					'DocumentoCompra.anulado'=>false,
					'DocumentoCompra.codigo_documento_id'=>$this->data['DocumentoCompra']['codigo_documento_id'],
					'DocumentoCompra.numero_documento'=>$this->data['DocumentoCompra']['numero_documento'],
					'DocumentoCompra.ruc_proveedor'=>$this->data['DocumentoCompra']['ruc_proveedor']
				)));

            $fe=implode('/',$this->data['DocumentoCompra']['fecha_emision']);
            $validar_rrhh=array();
            if($this->data['DocumentoCompra']['codigo_documento_id']==102){
                $validar_rrhh=$this->DocumentoCompra->find('first',array(
					'conditions'=>array(
						'DocumentoCompra.activo'=>true,
						'DocumentoCompra.anulado'=>false,
						'DocumentoCompra.codigo_documento_id'=>$this->data['DocumentoCompra']['codigo_documento_id'],
						'DocumentoCompra.fecha_emision'=>$fe,
						'DocumentoCompra.ruc_proveedor'=>$this->data['DocumentoCompra']['ruc_proveedor']
					)));
            }

            if(empty($validar_rrhh)){//validamos que no se remitan mas de un rrhh x emisor en un mismo dia.
                if(empty($validar_documento)){
                    $this->DocumentoCompra->begin();
                    if(in_array((int)$this->data['DocumentoCompra']['opc'],array(1,2,3))){
						$this->data['DocumentoCompra']['fecha_pago'] = $this->data['DocumentoCompra']['fecha_emision'];        	
						$this->data['DocumentoCompra']['fecha_entrega'] = $this->data['DocumentoCompra']['fecha_emision'];
						$this->data['DocumentoCompra']['ingreso'] = false;
						$this->data['DocumentoCompra']['automatico'] = false;
						$this->data['DocumentoCompra']['moneda_id'] = $this->_usuario['Empresa']['moneda_id'];
						$this->data['DocumentoCompra']['tipo_cambio'] = 1;
						$this->data['DocumentoCompra']['tipo_cambio_impuesto'] = 1;
						$this->data['DocumentoCompra']['pagado'] = true;
                    }
                    if($documento_compra = $this->insert()){
                        $result = true;
                        switch((int)$this->data['DocumentoCompra']['opc']){
                            case 1:
								$viaticoDocumento = $this->data['DocumentoCompra']['Viatico']['ViaticoDocumento'];
								$viaticoDocumento['documento_id'] = $documento_compra;
								$viaticoDocumento['tipo_creacion'] = true;
								//$id = $viaticoDocumento['viatico_id'];
								$result = $result && $this->DocumentoCompra->ViaticosDocumento->save($viaticoDocumento);
								if($result){
									$this->Session->setFlash(__('El Documento de Compra ha sido guardado', true));								
									$dato = $this->HojaRuta->find('first', array(
													'fields'=>array('HojaRuta.id', 'HojaRuta.vehiculo_id', 'HojaRuta.viatico_id'),
													'conditions'=> array('HojaRuta.viatico_id'=>$viaticoDocumento['viatico_id']),
													'contain'=>array(
															'Vehiculo.matricula', 
															'Viatico'=>array(
																	'fields'=>array('id', 'numero_documento','chofere_id'),
																	'Chofere'=>array(
																			'fields'=>array('id','empresa_id'),
																			'Tercero'=>array('id','razon_social'))))
									));
									$glosa = ' PLACA:'.$dato['Vehiculo']['matricula'].' CH:'.$dato['Viatico']['Chofere']['Tercero']['razon_social'].' VIATICO:'.$dato['Viatico']['numero_documento'] ;
									$dc = $this->DocumentoCompra->find('first', array('recursive'=>-1, 'conditions'=>array('DocumentoCompra.id'=>$documento_compra)));
									$dc['DocumentoCompra']['observaciones'] = $dc['DocumentoCompra']['observaciones'].$glosa;
									$this->DocumentoCompra->save($dc['DocumentoCompra']);
									$this->DocumentoCompra->commit();
									$this->redirect(array('controller'=>'OrdenSalidas','action'=>'view/'.$dato['HojaRuta']['id']));
								} else {
									$this->Session->setFlash(__('El Documento de Compra no ha sido guardado', true));
									$this->DocumentoCompra->rollback();
								}
								break;
                            case 2:						
                                    $viaticoDocumento = $this->data['DocumentoCompra']['Viatico']['ViaticoDocumento'];
                                    $viaticoDocumento['documento_id'] = $documento_compra;
                                    $viaticoDocumento['tipo_creacion'] = true;
                                    //$id = $viaticoDocumento['viatico_id'];
                                    $result = $result && $this->DocumentoCompra->ViaticosDocumento->save($viaticoDocumento);                        						                        
                                    if($result){                            
                                            $this->Session->setFlash(__('El Documento de Compra ha sido guardado', true));
                                            $this->DocumentoCompra->commit();
                                            $this->redirect(array('controller'=>'Viaticos','action'=>'view/'.$viaticoDocumento['viatico_id']));
                                    } else{
                                            $this->Session->setFlash(__('El Documento de Compra no ha sido guardado', true));
                                            $this->DocumentoCompra->rollback();
                                    }
                                    break;
                            case 3:
                                    # agregamos la liquidacion de documento de compra
                                    $liquidacion = $this->Liquidacione->find('first',array(
                                            'conditions'=>array('Liquidacione.id'=>$this->data['Liquidacione']['id']),
                                            'contain'=>array('FondoFijo')
                                    ));
                                    $entotal = $liquidacion['Liquidacione']['suma_importe_total']+ $this->data['DocumentoCompra']['suma_importe_total'];                        
                                    $flexible = $liquidacion['FondoFijo']['flexible'];
                                    if($flexible){
                                                    $entotal = 0;
                                    }else{
                                                    $entotal = $entotal;
                                    }                        
                                    if($entotal > $liquidacion['FondoFijo']['monto']){
                                                    $result = false;
                                    }else{
                                                    # actualizamos el total de la liquidacion
                                                    $liquidacion['Liquidacione']['id'] = $this->data['Liquidacione']['id'];
                                                    $liquidacion['Liquidacione']['suma_importe_total'] = $entotal;
                                                    $result = $result && $this->Liquidacione->save($liquidacion);
                                                    # ingremos el ID a liquidacion_documento
                                                    $data['LiquidacionDocumento']['tipo_creacion'] 	= true;
                                                    $data['LiquidacionDocumento']['liquidacion_id']	= $this->data['Liquidacione']['id'];
                                                    $data['LiquidacionDocumento']['documento_id'] 	= $documento_compra;
                                                    $data['LiquidacionDocumento']['usuario_creacion_id'] = $this->_usuario['id'];
                                                    $data['LiquidacionDocumento']['fecha_creacion'] = 'now()';
                                                    $result = $result && $this->Liquidacione->LiquidacionDocumento->save($data);                                
                                    }
                                    if($result){                            
                                            $this->Session->setFlash(__('El Documento de Compra ha sido guardado', true));
                                            $this->DocumentoCompra->commit();
                                            $this->redirect(array('controller'=>'Liquidaciones','action'=>'edit/'.$this->data['Liquidacione']['id']));
                                    } else{
                                            $this->Session->setFlash(__('El Documento de Compra no ha sido guardado', true));
                                            $this->DocumentoCompra->rollback();
                                    }
                                    break;
                            default:
                                $this->DocumentoCompra->commit();
                                $this->redirect(array('controller'=>'DocumentoCompras','action'=>'index'));
                        }
                    } 
                    else{
                                    $this->set('err',$this->DocumentoCompra->validationErrors);
                                    $this->Session->setFlash(__('El Documento de Compra no ha sido guardado. Por favor, intente nuevamente.', true));
                    }	
                } else {
                    $this->Session->setFlash("El documento de compras ya fue ingresado con anterioridad");
                }
            } else { 
                $this->Session->setFlash("Ya se ingreso un RRHH de este emisor con fecha ".$fe. "<br>No se pueden emitir varios RRHH con un mismo RUC a la empresa en el mismo dia");                
            }
        } 
        else {
        	$this->data['DocumentoCompra']['numero_control'] = $this->DocumentoCompra->generateControl($this->centroDistId());
	        $this->data['DocumentoCompra']['opc'] 			 = empty($this->params['url']['opc'])?0:$this->params['url']['opc'];
	        $this->data['DocumentoCompra']['con_detalle'] 	 =($this->data['DocumentoCompra']['opc'] == 0)?true:false;
	        $this->data['DocumentoCompra']['fecha_emision']  = $this->_ejercicio['Actual']['fecha'];
	        $this->data['DocumentoCompra']['fecha_pago'] 	 = $this->_ejercicio['Actual']['fecha'];
	        $this->data['DocumentoCompra']['fecha_entrega']  = $this->_ejercicio['Actual']['fecha'];
	        $this->data['DocumentoCompra']['moneda_id'] 	 = $this->_usuario['Empresa']['moneda_id'];
        }        
    }

    private function editar() {        
        $this->DocumentoCompra->Behaviors->attach('Containable');
        $documento_compra = $this->DocumentoCompra->find('first', array(
            'conditions'=>array('DocumentoCompra.id'=>$this->data['DocumentoCompra']['id']),
            'contain'	=>array(
                'DocumentoCompraDetalle'
            )
        ));
		
//        $this->DocumentoCompra->create();
        $this->data['DocumentoCompra']['usuario_modificacion_id'] = $this->_usuario['id'];
        $this->data['DocumentoCompra']['fecha_modificacion'] = 'now()';
        $documento_compra_id = $this->data['DocumentoCompra']['id'];

        if(empty($this->data['DocumentoCompra']['proveedor_id'])){
                $this->data['DocumentoCompra']['proveedor_id']	= $this->add_proveedor($this->data);
                if(!$this->data['DocumentoCompra']['proveedor_id']){
                	$this->Session->setFlash("No se pudo guardar el Proveedor verifique que este habilitado");
                	return false;
                }
                
        }        
        if ($this->DocumentoCompra->save($this->data['DocumentoCompra'])) {
            if(!empty($this->data['DocumentoCompraDetalle'])){				
                foreach($this->data['DocumentoCompraDetalle'] as $detalle){
                    if ($detalle['cantidad']!=''  && $detalle['valor_unidad']!=''){
                        $this->DocumentoCompra->DocumentoCompraDetalle->create();
                        $detalle['documento_compra_id'] = $this->DocumentoCompra->id;						
                        if($detalle["eliminado"] == '0'){
                            if(!$this->DocumentoCompra->DocumentoCompraDetalle->save($detalle)){
                                $this->DocumentoCompra->rollback();
                                return false;
                            }                            
                        } else if ($detalle["id"] != ''){
                            if (!$this->DocumentoCompra->DocumentoCompraDetalle->del($detalle["id"],false)) {
                                $this->DocumentoCompra->rollback();
                                return false;
                            }
                        }
                    }
                }
            }		
            //modificacion del presupuesto y del saldo del contrato y orden de compra            
            return $this->data['DocumentoCompra']['id'];
        } else {
            return false;
        }
    }

    public function edit($id = null){
        $this->set('previo',$this->referer());        
        $this->set('usuario',$this->_usuario['id']);                
        $this->set('monedas', $this->DocumentoCompra->Moneda->find('list',array(
		            'fields'=>array('Moneda.id','Moneda.simbolo'))));    	
    	$this->set('documentosConCreditoFiscal',json_encode($this->DocumentoCompra->documentosConCreditoFiscal));
    	
        if(!empty($this->data)) {
            $this->DocumentoCompra->begin();
            $this->data['DocumentoCompra']['fecha_pago'] = $this->data['DocumentoCompra']['fecha_emision'];
            $this->data['DocumentoCompra']['fecha_entrega'] = $this->data['DocumentoCompra']['fecha_entrega']; 
            if($documento_compra = $this->editar()){
                $result = true;
                switch($this->data['DocumentoCompra']['opc']){
                    case 1:
                        $this->Session->setFlash(__('El Documento de Compra ha sido guardado', true));
                        $this->DocumentoCompra->commit();
                        $dato = $this->HojaRuta->find('first', array(
                                                        'conditions'=> array(
                                                                'HojaRuta.viatico_id'=>$this->data['DocumentoCompra']['Viatico']['ViaticoDocumento']['viatico_id'])));
                        $this->Session->setFlash(__('El Documento de Compra ha sido guardado.', true));
                        $this->redirect(array('controller'=>'OrdenSalidas','action'=>'view/'.$dato['HojaRuta']['id']));                        
                        break;
                    case 2:
                        $this->Session->setFlash(__('El Documento de Compra ha sido guardado', true));                        							
						$this->DocumentoCompra->commit();                            
						$this->Session->setFlash(__('El Documento de Compra ha sido guardado.', true));
						$this->redirect(array('controller'=>'Viaticos','action'=>'view/'.$this->data['Viatico'][0]['id']));                        
                        break;
                    case 3:
                        # agregamos la liquidacion de documento de compra
                        # buscamos el el documento asociado a la liquidacion
						$liquidacion = $this->Liquidacione->LiquidacionDocumento->find('first',array(
												'conditions'=>array(
													'LiquidacionDocumento.documento_id'=>$this->data['DocumentoCompra']['id'] ),
												'contain'=>array(
													'Liquidacione'=>array(	
														'fields'=>array('id','centro_dist_id','fondo_fijo_id','numero_documento'),
													'FondoFijo'=>array('fields'=>array('id','descripcion'),)
														)
													)));                            
                        $this->Session->setFlash(__('El Documento de Compra ha sido guardado', true));
						$this->DocumentoCompra->commit();                                								
						$this->redirect(array('controller'=>'Liquidaciones','action'=>'edit/'.$liquidacion['LiquidacionDocumento']['liquidacion_id']));                        
					break;
						
                    default:                        
						$this->Session->setFlash(__('El Documento de Compra ha sido guardado.', true));
						$this->DocumentoCompra->commit();                            
						$this->redirect(array('controller'=>'DocumentoCompras','action'=>'index'));                            
                }
            } else{
				$this->DocumentoCompra->rollback();
				$this->set('err',$this->DocumentoCompra->validationErrors);
				$this->Session->setFlash(__('El Documento de Compra no ha sido guardado. Por favor, intente nuevamente.', true));
				return false;
            }
        } 
        else  {            
            $this->DocumentoCompra->Behaviors->attach('Containable');            
            $this->data = $this->DocumentoCompra->find('first', array(
				                'conditions'=>array('DocumentoCompra.id'=>$id, 'DocumentoCompra.activo'=>'true'),
				                'contain'=>array(
				                    'DocumentoCompraDetalle',
                                                    'Actividade'           =>	array('id','codigo', 'descripcion'),
				                    'CodigoDocumento'           =>	array('id','descripcion'),
				                    'CodigoDocumentoRef'        =>	array('id','descripcion'),
				                    'Proveedore'                =>	array(
				                            'fields'            =>	array('id','codigo'),
				                            'Tercero'           =>	array('id', 'razon_social')))));
            $this->data['DocumentoCompra']['serie'] = substr($this->data['DocumentoCompra']['numero_documento'], 0,4);
            $this->data['DocumentoCompra']['documento'] = substr($this->data['DocumentoCompra']['numero_documento'], -9);
            $this->set('ref_impuesto',$this->data['DocumentoCompra']['ref_impuesto']);
            if($this->data['DocumentoCompra']['automatico']){
                $this->Session->setFlash(__('Advertencia: El Documento de Compra no se puede modifica porque fue autogenerado', true));
                $this->redirect(array('controller'=>'DocumentoCompras','action'=>'view/'.$this->data['DocumentoCompra']['id'] ));
                return false;
            }

            if($this->data['DocumentoCompra']['pagado'] && $this->data['DocumentoCompra']['pagado']['Liquidacione']['cerrado']){
                $this->Session->setFlash(__('El Documento de Compra no es modificable.', true));
                $this->redirect(array('controller'=>'DocumentoCompras','action'=>'view/'.$this->data['DocumentoCompra']['id'] ));
            } elseif($this->data['DocumentoCompra']['cerrado']) {
                $this->Session->setFlash(__('El Documento de Compra no es modificable.', true));
                $this->redirect(array('controller'=>'DocumentoCompras','action'=>'view/'.$this->data['DocumentoCompra']['id'] ));
            }
            $this->data['DocumentoCompra']['opc'] = empty($this->params['url']['opc'])?0:$this->params['url']['opc'];
        }    	    
    }

    private function add_proveedor($data){

            $this->loadModel('Tercero');/////////////////////////////////////////////////////////
            //$datos=$this->Tercero->datosSunat(trim($data['DocumentoCompra']['ruc_proveedor']));
             $datos['error'] = true;
            if($datos['error']){
                    $proveedor['Tercero']['ruc']                = $data['DocumentoCompra']['ruc_proveedor'];
                    $proveedor['Proveedore']['codigo']          = $data['DocumentoCompra']['ruc_proveedor'];		
                    $proveedor['Proveedore']['direccion2']      = $data['DocumentoCompra']['loc_proveedor'];
                    $proveedor['Proveedore']['activo']          = true;		
                    $proveedor['Proveedore']['empresa_id']      = $this->empresaId();
                    $proveedor['Proveedore']['usuario_creacion_id']	= $this->usuarioId();
                    $proveedor['Proveedore']['fecha_creacion']  = 'now()';

                    $proveedor['Tercero']['direccion']          = $data['DocumentoCompra']['direccion_proveedor'];		
                    $proveedor['Tercero']['empresa_id']         = $this->empresaId();
                    $proveedor['Tercero']['centro_dist_id']     = $this->centroDistId();		
                    $proveedor['Tercero']['activo']             = true;
                    $proveedor['Tercero']['razon_social']       = $data['DocumentoCompra']['nombre_proveedor'];
                    $proveedor['Tercero']['tipo_documento_id']  = strlen($data['DocumentoCompra']['ruc_proveedor'])==11?6:1;
                    $proveedor['Tercero']['nombres']            = '';
                    $proveedor['Tercero']['apellido_paterno']   = '';
                    $proveedor['Tercero']['apellido_materno']   = '';
                    $proveedor['Tercero']['numero_documento']   = '';                    
            }else{
                    $proveedor['Tercero']['ruc']                = $datos['ruc'];
                    $proveedor['Proveedore']['codigo']          = $datos['ruc'];
                    $proveedor['Proveedore']['direccion2']      = '';
                    $proveedor['Proveedore']['nombre_comercial']= $datos['nombre_comercial'];
                    $proveedor['Proveedore']['activo']          = true;
                    $proveedor['Proveedore']['empresa_id']      = $this->empresaId();
                    $proveedor['Proveedore']['usuario_creacion_id']	= $this->usuarioId();
                    $proveedor['Proveedore']['fecha_creacion']  = 'now()';
                    $proveedor['Proveedore']['fecha_nacimiento']= $datos['fecha_nacimiento'];

                    $proveedor['Tercero']['direccion']          = $datos['direccion'];
                    $proveedor['Tercero']['telefono2']          = $datos['telefono'];		
                    $proveedor['Tercero']['empresa_id']         = $this->empresaId();
                    $proveedor['Tercero']['centro_dist_id']     = $this->centroDistId();		
                    $proveedor['Tercero']['activo']             = true;
                    $proveedor['Tercero']['razon_social']       = $datos['razon_social'];
                    $proveedor['Tercero']['tipo_documento_id']  = strlen($datos['ruc'])==11?6:1;
                    $proveedor['Tercero']['nombres']            = $datos['nombres'];
                    $proveedor['Tercero']['apellido_paterno']   = $datos['apellido_paterno'];
                    $proveedor['Tercero']['apellido_materno']   = $datos['apellido_materno'];
                    $proveedor['Tercero']['numero_documento']   = strlen($datos['ruc'])==8?$datos['ruc']:'';                    
            }

            $this->Proveedore->Tercero->create();
            $this->Proveedore->Tercero->save($proveedor['Tercero']);
            $proveedor['Proveedore']['id'] = $this->Proveedore->Tercero->id;
            $this->Proveedore->create();
            $this->Proveedore->save($proveedor['Proveedore']);
            return $proveedor['Proveedore']['id'];
    }

    private $viatico_id = null;
    private $liquidacion_id = null;

    private function remove($id = null){    	
        $this->DocumentoCompra->Behaviors->attach('Containable');
        $dato2 = $this->DocumentoCompra->find('first', array(
                                            'recursive'=>-1,
                                            'conditions'=>array(
                                                'DocumentoCompra.id'=>$id
                                            ),
                                            ));	

        if(empty($dato2)){
                $this->Session->setFlash(__('Error documento de compra no encontrado o se encuentra cerrado.', true));				
                return false;
        } else {
                $state = true;
                if(!$dato2['DocumentoCompra']['activo']){
                        $state = false;
                        $msg = "el documento de compra ya fue eliminado";
                } elseif($dato2['DocumentoCompra']['cerrado']){
                        $state = false;
                        $msg = "el documento de compra está cerrado, no se pueden realizar operaciones";
                } elseif(!empty($dato2['Viatico'])){
                        if($dato2['Viatico']['cerrado']){
                                $state = false;
                                $msg = "el documento pertenece a un viatico, no se puede modificar";
                        }
                } elseif(!empty($dato2['LiquidacionDocumento'])){
                        $state = false;
                        $msg = "el documento pertenece a una liquidación, no se puede modificar";
                }
                if(!$state){
                        $this->Session->setFlash("$msg");
                        return false;
                }
        }

        if($dato2['DocumentoCompra']['automatico']) {
                $this->Session->setFlash(__('Advertencia: El Documento de Compra no se puede eliminar porque fue autogenerado', true));
                return false;			
        }       
        $this->DocumentoCompra->begin();
        $dato2['DocumentoCompra']['activo']	=	false;
        $dato2['DocumentoCompra']['usuario_borrado_id']	=	$this->usuarioId();
        $dato2['DocumentoCompra']['fecha_borrado']	=	'now()';
        if($this->DocumentoCompra->save($dato2)){						
            $this->DocumentoCompra->commit();						
            $this->Session->setFlash(__('Documento de compra fue eliminado', true));
            return true;            
        } else {
            $this->DocumentoCompra->rollback();
            $this->Session->setFlash(__('Documento de compra no fue eliminado', true));
            return false;
        }
    }
	
    public function delete($id = null) {
        if ($id == null) {
            $this->Session->setFlash(__('Id de Documento de Compra no valido', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->remove($id);
        $opc = empty($this->params['url']['opc'])?0:$this->params['url']['opc'];        
        $this->redirect(array('action'=>'index'));
    }
    
    //opcion no funcional 
    public function anular($id = null,$bahivor = true) { 
    if (!$id) {
        if($bahivor){
                $this->Session->setFlash(__('Invalido Identificador para Documento de compra ', true));
                $this->redirect(array('action'=>'index'));
        } else {
                return false;	
        }
    }
    $this->DocumentoCompra->Behaviors->attach('Containable');
            $dato2 = $this->DocumentoCompra->find('first', 
                                                            array(
                                                                    'conditions'=>array(
                                                                            'DocumentoCompra.id'=>$id,
                                                                            'DocumentoCompra.activo'=>true,
                                                                            'DocumentoCompra.anulado'=>false,
                                                                    ),
                                                                    'contain'	=>array(
                                                                            'DocumentoCompraDetalle'
                                                                            )));		

            if(empty($dato2)){
                    $this->Session->setFlash(__('Advertencia: la operación no se puede realzar porque ya fue anulado o eliminado', true));
                    return false;
            }
            if($dato2['DocumentoCompra']['automatico']) {
                    $this->Session->setFlash(__('Advertencia: El Documento de Compra no se puede eliminar porque fue autogenerado', true));
                    return false;			
            }
            $dato2['DocumentoCompra']['usuario_anulacion_id'] = $this->_usuario['id'];
    $dato2['DocumentoCompra']['fecha_anulacion'] = 'now()';
    $dato2['DocumentoCompra']['anulado'] = true;
    $result = $this->DocumentoCompra->save($dato2);       
        if($result){			                    
                $this->Session->setFlash(__('Documento de compra fue anulado', true));
        if($bahivor){                
            $this->redirect(array('action'=>'index'));
        } else {				
            return true;
        }
    } else {
        $this->Session->setFlash(__('Documento de compra no fue anulado', true));
        if($bahivor){                
            $this->redirect(array('action'=>'index'));
        } else {
            return false;
        }
    }
}

    public function process(){
        $this->usuario = $this->Session->read('Usuario');
        $result = true;
        $this->DocumentoCompra->begin();
        foreach($this->data as $dato){
            if($dato['id']!='0'){					
                if($this->tiene_pago($dato['id'])){
                    $this->DocumentoCompra->rollback();
                    $this->Session->setFlash('Operación no permitida porque el documento fue pagado parcialmente o totalmente');
                    $this->redirect(array('action'=>'index'),null,true);
                }

                if(isset($this->params['form']['delete'])){
                    $result = $result && $this->remove($dato['DocumentoCompra']['id'],false);
                }
                if(isset($this->params['form']['cancel'])){
                    $result = $result && $this->anular($dato['DocumentoCompra']['id'],false);
                }
            }

        }
        if($result){
            $this->DocumentoCompra->commit();                
            $this->redirect(array('action'=>'index'),null,true);
        } else {
            $this->DocumentoCompra->rollback();                
            $this->redirect(array('action'=>'index'),null,true);
        }
    } 

    public function buscar2($busqueda = null){
        if(!empty($this->data['DocumentoCompra']['q'])){
			$q = $this->data['DocumentoCompra']['q'];
		} elseif (!empty($this->params['url']['q'])){
			$q = $this->params['url']['q'];
		} elseif (!empty($this->params['form']['q'])){
			$q = $this->params['form']['q'];
		}
		
		$codigo_documento_id = null;
		if(!empty($this->data['DocumentoCompra']['codigo_documento_id'])){
			$codigo_documento_id = $this->data['DocumentoCompra']['codigo_documento_id'];
		} elseif (!empty($this->params['url']['codigo_documento_id'])){
			$codigo_documento_id = $this->params['url']['codigo_documento_id'];
		} elseif (!empty($this->params['form']['codigo_documento_id'])){
			$codigo_documento_id = $this->params['form']['codigo_documento_id'];
		}
		
		$proveedor_id = null;
		if(!empty($this->data['DocumentoCompra']['proveedor_id'])){
			$proveedor_id = $this->data['DocumentoCompra']['proveedor_id'];
		} elseif (!empty($this->params['url']['proveedor_id'])){
			$proveedor_id = $this->params['url']['proveedor_id'];
		} elseif (!empty($this->params['form']['proveedor_id'])){
			$proveedor_id = $this->params['form']['proveedor_id'];
		}
		
		$pagado = null;
		if(!empty($this->data['DocumentoCompra']['pagado'])){
			$pagado = $this->data['DocumentoCompra']['pagado'];
		} elseif (!empty($this->params['url']['pagado'])){
			$pagado = $this->params['url']['pagado'];
		} elseif (!empty($this->params['form']['pagado'])){
			$pagado = $this->params['form']['pagado'];
		}
		
		$cerrado = false;
		if(!empty($this->data['DocumentoCompra']['cerrado'])){
			$cerrado = $this->data['DocumentoCompra']['cerrado'];
		} elseif (!empty($this->params['url']['cerrado'])){
			$cerrado = $this->params['url']['cerrado'];
		} elseif (!empty($this->params['form']['cerrado'])){
			$cerrado = $this->params['form']['cerrado'];
		}
		
		$documento_compra_id = null;
		if(!empty($this->data['DocumentoCompra']['documento_compra_id'])){
			$documento_compra_id = $this->data['DocumentoCompra']['documento_compra_id'];
		} elseif (!empty($this->params['url']['documento_compra_id'])){
			$documento_compra_id = $this->params['url']['documento_compra_id'];
		} elseif (!empty($this->params['form']['documento_compra_id'])){
			$documento_compra_id = $this->params['form']['documento_compra_id'];
		}
		
		$producto_id = null;
		if(!empty($this->data['DocumentoCompraDetalle']['producto_id'])){
			$producto_id = $this->data['DocumentoCompra']['documento_compra_id'];
		} elseif (!empty($this->params['url']['producto_id'])){
			$producto_id = $this->params['url']['documento_compra_id'];
		} elseif (!empty($this->params['form']['producto_id'])){
			$producto_id = $this->params['form']['producto_id'];
		}
		
		if(empty($q)){
			$result = array('Error'=>'No se establecieron los parámetros adecuadamente');
		} else {
			$conditions = array(
						'DocumentoCompra.activo' => true,
						'DocumentoCompra.centro_dist_id' => $this->centroDistId(),
						'DocumentoCompra.empresa_id' => $this->empresaId(),
						'DocumentoCompra.codigo_documento_id !=' => 160,
						//'DocumentoCompra.compra_directa'=>true,
						'OR'=>array(
								'cast(DocumentoCompra.id as varchar(11)) iLike'=>strtoupper($q).'%',								
								'DocumentoCompra.nombre_proveedor iLike'=>'%'.strtoupper($q).'%',
								'DocumentoCompra.numero_documento iLike'=>'%'.strtoupper($q).'%',
							)
						);
			if(!empty($codigo_documento_id)&&($codigo_documento_id!=-1)) $conditions['DocumentoCompra.codigo_documento_id'] = $codigo_documento_id;
			//if(!empty($pagado)) $conditions['DocumentoCompra.pagado'] = $pagado;
			if(!empty($cerrado)) $conditions['DocumentoCompra.cerrado'] = $cerrado;
			if(!empty($documento_compra_id)) $conditions['NOT']['DocumentoCompra.id'] = explode(',',$documento_compra_id);
			if(!empty($proveedor_id)) $conditions['DocumentoCompra.proveedor_id'] = $proveedor_id;
			
			$fields = array(
				'DocumentoCompra.id',				
				'DocumentoCompra.numero_control',	
				'DocumentoCompra.numero_documento',	
				'DocumentoCompra.proveedor_id',
				'DocumentoCompra.nombre_proveedor',
				'DocumentoCompra.direccion_proveedor',
				'DocumentoCompra.codigo_documento_id',
				'DocumentoCompra.moneda_id',
				'DocumentoCompra.fecha_emision',
				'DocumentoCompra.fecha_entrega',
				'DocumentoCompra.fecha_pago',
				'DocumentoCompra.observaciones',
				'DocumentoCompra.ingreso',
				'DocumentoCompra.tipo_cambio',
				'DocumentoCompra.suma_valor_total',
				'DocumentoCompra.suma_impuesto',
				'DocumentoCompra.suma_importe_total',
				'DocumentoCompra.suma_percepcion' );
			if(empty($producto_id)){
				$contain = array(							
							'Proveedore'=>array(
								'fields'=>array('id','codigo','direccion2'),
								'Tercero'=>array('id','ruc','direccion')
							),
							'Transa'=>array('id', 'codigo', 'descripcion'));
			} else {
				$contain = array( 
							'DocumentoCompraDetalle'=>array(
								'fields'=>array('id','valor_unidad'),
								'conditions'=>array('DocumentoCompraDetalle.producto_id'=>$producto_id)
							),
							'Proveedore'=>array(
								'fields'=>array('id','codigo','direccion2'),
								'Tercero'=>array('id','ruc','direccion')
							),
							'Transa'=>array('id', 'codigo', 'descripcion'));	
			}
			
			$this->DocumentoCompra->Behaviors->attach('Containable');
			$result = $this->DocumentoCompra->find('all', array(
				'fields'=>$fields,
				'conditions' => $conditions,
				'contain'=>$contain,
				'order'=>array('DocumentoCompra.numero_control ASC'),
				'limit'=>20)); 
			//var_dump($result);die;
		} 	
		//definiendo valores en caso q sea una peticion para autocompletado
		if(!empty($this->params['url']['autocomplete']) || !empty($this->params['form']['autocomplete'])){
			$res = array();
			foreach($result as $value){
				$res[] = array('value'=>$value['DocumentoCompra']['id'], 'display'=>'<span style="color:gray;font-size:.9em">'.$value['DocumentoCompra']['numero_control'].'</span><div style="float:right;font-size:.8em" title="'.$value['DocumentoCompra']['nombre_proveedor'].'">'. $this->neat_trim($value['DocumentoCompra']['nombre_proveedor'], 24) .'</div>');
			}
			$result = $res;
		}		
		if ($this->RequestHandler->isAjax()){
			$this->_ajaxify($result);						
		} else {
			return $result;
		}
	}
	
    function buscar($busqueda = null){
            $resultados = '';
            if($busqueda){
                    $resultados = $this->buscar_documento($busqueda);
            }
            if(!$resultados && !empty($this->data)){
                    $resultados = $this->buscar_documento($this->data['DocumentoCompra']['busqueda']);
            }
            if ($this->RequestHandler->isAjax()){
                    $this->_ajaxify($resultados);
            }
            if($resultados){
                    $this->set('resultados',$resultados);
            }
    }

    private function buscar_documento($busqueda = null){
        $this->DocumentoCompra->Behaviors->attach('Containable');
        $resultados = $this->DocumentoCompra->find('all',array(
            'conditions'=>array(
                'DocumentoCompra.empresa_id'=>$this->_usuario['Tercero']['empresa_id'],
                'DocumentoCompra.centro_dist_id'=>$this->_usuario['Tercero']['centro_dist_id'],
                'DocumentoCompra.numero_documento like'	=>	"$busqueda%",
                'DocumentoCompra.codigo_documento_id'	=>	array('101','103'),
                'DocumentoCompra.activo'=>1,
            )
        ));
        return $resultados;
    }

    private function reporte_general($conditions=array(),$order='DocumentoCompra.numero_documento'){
            $this->reporte_html();
            $conditions['DocumentoCompra.activo'] = true;	
            $conditions['DocumentoCompra.anulado'] = false;
            $conditions['DocumentoCompra.empresa_id'] = $this->empresaId();			
            // $conditions['DocumentoCompra.ejercicio_id'] = $this->ejercicioId();	

            $this->DocumentoCompra->DocumentoCompraDetalle->bindModel(array(
                    'belongsTo'=>array(
                        'DocumentoCompra'=>array(								
                                                            'foreignKey' => 'documento_compra_id',
                                                            'className'	 => 'DocumentoCompra' ))));

            $this->DocumentoCompra->bindModel(array(
                                            'hasMany'=>array(
                                                    'CompraGenerada'=>array(								
                                                            'foreignKey' => 'orden_compra_id',
                                                            'className'	 => 'DocumentoCompra' )
                                            )));
            $documento_compra_detalle = $this->DocumentoCompra->DocumentoCompraDetalle->find('all', array( 
                                                'conditions'=>$conditions,
                                                'fields'	=>array(
                                                    'documento_compra_id', 
                                                    'descripcion_producto', 
                                                    'cantidad', 
                                                    'valor_unidad',
                                                    'valor_total',
                                                    'unidad_descripcion',
                                                    'cantidad_despachada',
                                                    'pendiente_despacho'),
                                                'order'=>array($order=>'desc'),
                                                'contain'	=>array(
                                                    'DocumentoCompra'=>array(
                                                        'fields'=>array(
                                                            'id', 
                                                            'numero_documento', 
                                                            'codigo_documento_id', 
                                                            'suma_importe_total',
                                                            'fecha_emision',
                                                            'fecha_entrega',
                                                            'ruc_proveedor',
                                                            'nombre_proveedor',														
                                                            ),
                                                        'Moneda'=>array('id', 'descripcion'),
                                                        'CompraGenerada'=>array('id','numero_control')
                                                    ),										
                                                    'Producto'=>array('codigo')
                                                )));

            $moneda = array();			
            $documentos = array();
            if(!empty($documento_compra_detalle)){			
                foreach($documento_compra_detalle as &$detalle){																				
                    $moneda[$detalle['DocumentoCompra']['Moneda']['id']] = $detalle['DocumentoCompra']['Moneda']['descripcion'];
                    $detalle['DocumentoCompraDetalle']['unidad_'.$detalle['DocumentoCompra']['Moneda']['id']] = $detalle['DocumentoCompraDetalle']['valor_unidad'];
                    $detalle['DocumentoCompraDetalle']['total_'.$detalle['DocumentoCompra']['Moneda']['id']] = $detalle['DocumentoCompraDetalle']['valor_total'];
                    if(empty($detalle['DocumentoCompra']['CompraGenerada'])){
                        $documentos[] = $detalle;
                    }
                }
            }
            $this->set('monedas', $moneda);
            return $documentos;
    }

    public function compras_historico($fecha_inicio, $fecha_fin){	
            $conditions = array('DocumentoCompra.fecha_emision >='=>$fecha_inicio, 'DocumentoCompra.fecha_emision <='=>$fecha_fin);
            $conditions['DocumentoCompra.codigo_documento_id <>'] = 160;	
            $this->set('fecha', array('de'=>$fecha_inicio, 'to'=>$fecha_fin ));
            $this->set('DocumentoCompraDetalle', $this->reporte_general($conditions));
            return true;
    }

    public function compras_por_proveedor($ruc = null){
		$ruc = empty($ruc)?$this->params['url']['ProveedorRuc']:$ruc;
			
		$conditions = array();
		$conditions['DocumentoCompra.codigo_documento_id <>'] = 160;
		$conditions['DocumentoCompra.ejercicio_id'] = $this->ejercicioId();
		if($ruc){			
			$proveedor = $this->DocumentoCompra->Proveedore->find('first', array(
                            'conditions'=>array(                         
								'Tercero.ruc'=>$ruc,       
                                'Tercero.empresa_id'=>$this->empresaId(),                                
                                'Proveedore.activo'=>true
                            ),
                            'fields'=>array('Proveedore.id', 'Proveedore.nombre_comercial','Tercero.razon_social','Tercero.ruc'),
                            'contain'=>array('Tercero')
                        ));
			$this->set('proveedor', $proveedor);
			$conditions['DocumentoCompra.proveedor_id'] = $proveedor['Proveedore']['id'];
		}
                
		$this->set('DocumentoCompraDetalle', $this->reporte_general($conditions));
		return true;
	}
}
?>